package br.edu.granbery.indianostore.action;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.edu.granbery.indianostore.controller.Action;
import br.edu.granbery.indianostore.dao.ClienteDao;
import br.edu.granbery.indianostore.dao.DaoFactory;
import br.edu.granbery.indianostore.dao.UsuarioDao;
import br.edu.granbery.indianostore.model.Cliente;
import br.edu.granbery.indianostore.model.Usuario;

public class CadastrarClienteAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response)
			throws IOException {
		
		String nome = request.getParameter("txtNome");
		String sobrenome = request.getParameter("txtSobreNome");
		String cpf = request.getParameter("txtCpf");
		String login = request.getParameter("txtLogin");
		String senha = request.getParameter("txtSenha");
		
		String dataNascimento = request.getParameter("txtDataNasc");
		String email = request.getParameter("txtEmail");
		String telefone = request.getParameter("txtTel");
		String numero = request.getParameter("txtNumero");
		String logradouro = request.getParameter("txtLogradouro");
		String bairro = request.getParameter("txtBairro");
		String uf = request.getParameter("txtUF");
		String pais = request.getParameter("txtPais");
		
		RequestDispatcher view;
		

			HttpSession sessao = request.getSession(true);
			DaoFactory factory = (DaoFactory) sessao.getAttribute("factory");
						
			Cliente cliente = new Cliente();
			cliente.setDataNascimento(dataNascimento);
			cliente.setEmail(email);
			cliente.setTelefone(telefone);
			cliente.setNumero(numero);
			cliente.setLogradouro(logradouro);
			cliente.setBairro(bairro);
			cliente.setUf(uf);
			cliente.setPais(pais);
			
			
			Usuario usuario = new Usuario();
			usuario.setNome(nome);
			usuario.setSobrenome(sobrenome);
			usuario.setCpf(cpf);
			usuario.setLogin(login);
			usuario.setSenha(senha);
			usuario.setTipo("Cliente");
			
			usuario.setCliente(cliente);
			cliente.setUsuario(usuario);
			
			UsuarioDao usuarioDao = factory.getUsuarioDao();
			factory.beginTransaction();
			
			if(usuarioDao.inserir(usuario))
			{
				factory.commit();
			}
			else
			{
				if (factory.hasTransaction()) {
					factory.stopTransaction();
				}
			}
			
			usuarioDao.destruir(usuario);
			
			ClienteDao clienteDao = factory.getClienteDao();
			factory.beginTransaction();
			
			if(clienteDao.inserir(cliente))
			{
				request.setAttribute("sucess","Cliente cadastrado com sucesso.");
				factory.commit();
			}
			else
			{
				request.setAttribute("erro", "Erro ao cadastrar o cliente.");
				if (factory.hasTransaction()) {
					factory.stopTransaction();
				}
			}
			
			clienteDao.destruir(cliente);
		
		try {
			view = request.getRequestDispatcher("/View/Cliente/CadastrarCliente.jsp");
			view.forward(request, response);
		} catch (ServletException ex) {
			Logger.getLogger(CadastrarUsuarioAction.class.getName()).log(
					Level.SEVERE, null, ex);
		}
	}
}
